<?php
class ErtekelesekController extends AppController {

	var $name = 'Ertekelesek';

	function isAuthorized(){
		return true;
	}

	function add(){
		//kérjük le kiket értékelt már és mikor
		$this->Ertekeles->unbindModel(array('belongsTo' => array('Szempont', 'ErtekeloUser', 'ErtekeltUser')));
		$_ertekeltUserek = $this->Ertekeles->find('all', array(
																			'conditions' => array('Ertekeles.ertekelo_userid' => $this->Auth->user('id')),
																			'fields' => array('DISTINCT(Ertekeles.ertekelt_userid)', 'Ertekeles.idopont')
																			));
		$ertekeltUserek = array();
		foreach($_ertekeltUserek as $e){
			if(array_key_exists($e['Ertekeles']['ertekelt_userid'], $ertekeltUserek) && is_array($ertekeltUserek[$e['Ertekeles']['ertekelt_userid']])){
				array_push($ertekeltUserek[$e['Ertekeles']['ertekelt_userid']], $e['Ertekeles']['idopont']);
			}
			else{
				$ertekeltUserek[$e['Ertekeles']['ertekelt_userid']] = array($e['Ertekeles']['idopont']);
			}
		}
		
		/*
		 debug($ertekeltUserek);
		 Array(
			[1] => Array(
            [0] => 2011-09-01
            [1] => 2011-10-01)
         [2] => Array(
            [0] => 2011-10-01))
		*/
		
		if (!empty($this->data)) {
			//debug($this->data);die();
			/*
			([Ertekeles] => Array(
            [ertekelt_userid] => 1
            [idopont] => Array
                (
                    [month] => 10
                    [day] => 21
                    [year] => 2011
                )
            [pontszam] => Array
                ([szempont_id] => pontszám
                    [2] => 0
                    [3] => 1
                    [5] => 0
                )))
			*/
			
			//ellenőrizzük, hogy erre az időszakra ezt a usert értékelte-e már?
			if(array_key_exists($this->data['Ertekeles']['ertekelt_userid'], $ertekeltUserek) && in_array($this->data['Ertekeles']['idopont']['year'].'-'.$this->data['Ertekeles']['idopont']['month'].'-01', $ertekeltUserek[$this->data['Ertekeles']['ertekelt_userid']])){
				$this->Session->setFlash('A ' . $this->data['Ertekeles']['idopont']['year'].'-'.$this->data['Ertekeles']['idopont']['month'] .'. hónapra már étékelted ezt a bhaktát!');
			}
			else{
				//egy tömbben kapunk adatokat, melyet rekordonként kell mentenünk
				foreach($this->data['Ertekeles']['pontszam'] as $k => $pont){
					$data = array(
									'ertekelo_userid' => $this->Auth->user('id'),
									'ertekelt_userid' => $this->data['Ertekeles']['ertekelt_userid'],
									'idopont' => $this->data['Ertekeles']['idopont'],
									'szempont_id' => $k,
									'pontszam' => $pont
									);
					//debug($data);
					$this->Ertekeles->create();
					unset($this->Ertekeles->id);
					if ($this->Ertekeles->save($data)) {
						$this->Session->setFlash(__('The ertekeles has been saved', true));
					} else {
						$this->Session->setFlash(__('The ertekeles could not be saved. Please, try again.', true));
					}
				}
				$this->redirect(array('action' => 'index'));
			}
		}
		$szempontok = $this->Ertekeles->Szempont->Szempontcsoport->find('all'); //, array('order' => 'Szempontcsoport.csoport'));
		$ertekeloUsers = $this->Ertekeles->ErtekeloUser->find('list');
		$ertekeltUsers = $this->Ertekeles->ErtekeltUser->find('list', array('fields' => array('ErtekeltUser.id', 'ErtekeltUser.nev')));
		$ertekeltUserek = json_encode($ertekeltUserek);
		$this->set(compact('szempontok', 'ertekeloUsers', 'ertekeltUsers', 'ertekeltUserek'));
	}

	function ertekeleseim(){
		//milyen értékeléseket kaptam
		//melyik hónapra vannak rám vonatkozó értékelések?
		//a hónapban már minden user kitöltötte az értékelést?
		$this->Ertekeles->unbindModel(array('belongsTo' => array('Szempont', 'ErtekeloUser', 'ErtekeltUser')));
		/*SELECT COUNT(DISTINCT(ertekelo_userid)), `Ertekeles`.`idopont`
			FROM `ertekelesek` AS `Ertekeles`
			WHERE `Ertekeles`.`ertekelt_userid` = 1
			GROUP BY idopont
			ORDER BY `Ertekeles`.`idopont` DESC*/
		$eI = $this->Ertekeles->find('all',
														array(
															'conditions' => array('Ertekeles.ertekelt_userid' => $this->Auth->user('id')),
															'fields' => array('COUNT(DISTINCT(Ertekeles.ertekelo_userid)) AS userDb','Ertekeles.idopont'),
															'group' => array('Ertekeles.idopont'),
															'order' => array('Ertekeles.idopont DESC')
															));
		//debug($eI);
		//aktiv userek az utolsó hónapban
		$aktivUserSzam = $this->Ertekeles->ErtekeloUser->find('count', array('conditions' => array('ErtekeloUser.aktiv' => 1)));
		
		foreach($eI as $s => $i){		//átalakítjuk a select számára
			//a selectbe azok a hónapok kerülnek amire van értékelésem és az utolsó hónap ha már mindenki értékelt (különben disabled [d])
			$ertekeleseimIdopontjai[$i['Ertekeles']['idopont']] = $i['Ertekeles']['idopont'];
			if($s == 0 && $aktivUserSzam != $i[0]['userDb'])	//ha az utolsó hónapra még nem érkezett be az összes értékelés
				$ertekeleseimIdopontjai[$i['Ertekeles']['idopont']] = array(
																							'name' => $i['Ertekeles']['idopont'],
																							'value' => $i['Ertekeles']['idopont'],
																							'disabled' => true);
		}
		//debug($ertekeleseimIdopontjai);
		$this->set(compact('ertekeleseimIdopontjai'));
		
		//ha van kiválasztott dátum akkor kérjük le a rá vonatkozó értékeléseket
		if($this->data){
			//saját magam értékelése saját magamra
			$this->Ertekeles->unbindModel(array('belongsTo' => array('ErtekeloUser', 'ErtekeltUser', 'Szempont')));
			$_ertekeleseimSajat = $this->Ertekeles->find('all',
															array(
																'conditions' => array(
																						'Ertekeles.ertekelt_userid' => $this->Auth->user('id'),
																						'Ertekeles.ertekelo_userid' => $this->Auth->user('id'),
																						'Ertekeles.idopont' => $this->data['Ertekeles']['idopont']
																						)
																));
			
			foreach($_ertekeleseimSajat as $e){
				//át kell alakítani a tömböt úgy, hogy az index a szempont_id legyen az egyszerűbb kezelhetőség kedvéért
				$ertekeleseimSajat[$e['Ertekeles']['szempont_id']] = $e['Ertekeles'];
			}
			//debug($ertekeleseimSajat);

			//mások hogyan értékeltek
			$this->Ertekeles->unbindModel(array('belongsTo' => array('ErtekeloUser', 'ErtekeltUser', 'Szempont')));
			$_ertekeleseimMasok = $this->Ertekeles->find('all',
															array(
																'conditions' => array(
																						'Ertekeles.ertekelt_userid' => $this->Auth->user('id'),
																						'Ertekeles.ertekelo_userid !=' => $this->Auth->user('id'),
																						'Ertekeles.idopont' => $this->data['Ertekeles']['idopont']
																						),
																'fields' => array('Ertekeles.szempont_id', 'AVG(Ertekeles.pontszam) AS pontszam'),
																'group' => array('Ertekeles.szempont_id')
																));
			foreach($_ertekeleseimMasok as $e){
				//át kell alakítani a tömböt úgy, hogy az index a szempont_id legyen az egyszerűbb kezelhetőség kedvéért
				$ertekeleseimMasok[$e['Ertekeles']['szempont_id']] = array(
																							'szempont_id' => $e['Ertekeles']['szempont_id'],
																							'pontszam' => $e[0]['pontszam']);
			}
			//debug($ertekeleseimMasok);
			
			//hányan értékeltek
			$this->Ertekeles->unbindModel(array('belongsTo' => array('ErtekeloUser', 'ErtekeltUser', 'Szempont')));
			$ertekeloUserSzam = $this->Ertekeles->find('count', array(
															'conditions' => array(
																					'Ertekeles.ertekelt_userid' => $this->Auth->user('id'),
																					'Ertekeles.ertekelo_userid !=' => $this->Auth->user('id'),
																					'Ertekeles.idopont' => $this->data['Ertekeles']['idopont']
																					),
															'fields' => 'DISTINCT(Ertekeles.ertekelo_userid)'
															));
			//debug($ertekeloUserSzam);

			$ertekeleseim = array('sajat' => $ertekeleseimSajat, 'masok' => $ertekeleseimMasok);
			$szempontok = $this->Ertekeles->Szempont->Szempontcsoport->find('all');
			$this->set(compact('szempontok', 'ertekeleseim', 'ertekeloUserSzam'));
		}
		
		//debug($ertekeleseim);
	}
}